import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import tailwindcss from "@tailwindcss/vite";
import { resolve } from 'path'

// https://vite.dev/config/
export default defineConfig(({ mode }) => {
  const isProduction = mode === 'production';

  return {
    plugins: [
        vue(),
        tailwindcss()
    ],

    // 路径别名配置
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src')
      }
    },

    // 开发服务器配置
    server: {
      proxy: {
        '/api': {  // 所有以 /api 开头的请求都会被代理
          target: 'http://localhost:8080', // 你的 Spring Boot 后端地址
          changeOrigin: true
          // 不重写路径，因为后端 API 也是以 /api 开头的
        }
      }
    },

    // 生产环境构建配置
    build: {
      outDir: 'dist',
      assetsDir: 'assets',
      sourcemap: false,
      minify: 'terser',
      rollupOptions: {
        output: {
          chunkFileNames: 'assets/js/[name]-[hash].js',
          entryFileNames: 'assets/js/[name]-[hash].js',
          assetFileNames: 'assets/[ext]/[name]-[hash].[ext]'
        }
      },
      // Terser 配置 - 生产环境日志清理
      terserOptions: {
        compress: {
          // 移除 console 语句
          drop_console: isProduction,
          drop_debugger: isProduction,
          // 移除未使用的代码
          dead_code: true,
          // 移除无用的函数参数
          unused: true
        },
        mangle: {
          // 保留类名，避免 Vue3 组件问题
          keep_classnames: true,
          // 保留函数名，避免 Vue3 组合式 API 问题
          keep_fnames: true
        },
        format: {
          // 移除注释
          comments: false
        }
      }
    },

    // esbuild 配置 - 开发环境和生产环境通用
    esbuild: {
      // 生产环境移除 console 和 debugger
      drop: isProduction ? ['console', 'debugger'] : []
    }

    /* 混淆配置开始 - 可选功能，需要时取消注释
    // 注意：启用混淆可能影响调试和某些动态特性
    // 建议在充分测试后再启用
    ,
    define: isProduction ? {
      // 移除开发环境标识
      __DEV__: false,
      'process.env.NODE_ENV': '"production"'
    } : {},

    // 额外的混淆选项（需要安装 vite-plugin-obfuscator）
    // plugins: [
    //   ...plugins,
    //   isProduction && obfuscator({
    //     compact: true,
    //     controlFlowFlattening: false, // 避免影响 Vue3 响应式系统
    //     deadCodeInjection: false,     // 避免影响 Tailwind CSS
    //     debugProtection: false,       // 避免调试问题
    //     debugProtectionInterval: false,
    //     disableConsoleOutput: true,
    //     identifierNamesGenerator: 'hexadecimal',
    //     log: false,
    //     numbersToExpressions: false,  // 避免影响数值计算
    //     renameGlobals: false,         // 避免影响全局变量
    //     selfDefending: false,         // 避免兼容性问题
    //     simplify: true,
    //     splitStrings: false,          // 避免影响字符串处理
    //     stringArray: true,
    //     stringArrayCallsTransform: false,
    //     stringArrayEncoding: [],
    //     stringArrayIndexShift: true,
    //     stringArrayRotate: true,
    //     stringArrayShuffle: true,
    //     stringArrayWrappersCount: 1,
    //     stringArrayWrappersChainedCalls: true,
    //     stringArrayWrappersParametersMaxCount: 2,
    //     stringArrayWrappersType: 'variable',
    //     stringArrayThreshold: 0.75,
    //     unicodeEscapeSequence: false, // 避免中文显示问题
    //   })
    // ].filter(Boolean)
    混淆配置结束 */
  }
})
